#!/usr/bin/env bash

. $(dirname $0)/util
set -eu -o pipefail

: ${CONTINUOUS_INTEGRATION=}
: ${BUILDX_NOCACHE=}

progressFlag=""
if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi

iid="buildx-tests"
iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX)
set -x

case $buildmode in
"buildkit")
  tmpfile=$(mktemp -t docker-iidfile.XXXXXXXXXX)
  buildctl build $progressFlag --frontend=dockerfile.v0 \
    --local context=. --local dockerfile=. \
    --frontend-opt target=integration-tests \
    --output type=docker,name=$iid,dest=$tmpfile
  docker load -i $tmpfile
  rm $tmpfile
  ;;
"docker-buildkit")
  export DOCKER_BUILDKIT=1
  docker build --iidfile $iidfile --target integration-tests --force-rm .
  iid=$(cat $iidfile)
  ;;
*)
  echo "docker with buildkit support is required"
  exit 1
  ;;
esac

cacheVolume="buildx-cache"
if ! docker inspect "$cacheVolume" > /dev/null 2>&1 ; then
cacheVolume=$(docker create --name=buildx-cache -v /root/.cache -v /go/pkg/mod alpine)
fi

docker run --rm -v /tmp --volumes-from=$cacheVolume --privileged $iid go test ${TESTFLAGS:--v} ${TESTPKGS:-./...}

if [ -n "$BUILDX_NOCACHE" ]; then
  docker rm -v $cacheVolume
fi

case $buildmode in
"docker-buildkit")
  rm "$iidfile"
  docker rmi $iid
  ;;
esac
